package cn.aws360.boot.system.biz.service;

import cn.aws360.boot.data.api.pojo.request.PageQuery;
import cn.aws360.boot.data.api.pojo.response.PageResult;
import cn.aws360.boot.system.api.pojo.request.*;
import cn.aws360.boot.system.api.pojo.response.SysUserModel;
import cn.aws360.boot.system.biz.domain.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author junnan
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 新增用户
     *
     * @param sysUserWrite 新增用户参数
     * @return 是否成功
     */
    Boolean add(SysUserWrite sysUserWrite);

    /**
     * 修改用户
     *
     * @param sysUserWrite 修改用户参数
     * @return 是否成功
     */
    Boolean edit(SysUserWrite sysUserWrite);

    /**
     * 重置用户设置
     *
     * @param sysUserResetWrite 修改用户重置参数
     * @return 是否成功
     */
    Boolean reset(SysUserResetWrite sysUserResetWrite);

    /**
     * 删除用户
     *
     * @param ids 删除用户 ids
     * @return 是否成功
     */
    Boolean remove(String ids);

    /**
     * 查询用户详情
     *
     * @param id 查询用户 id
     * @return SysUserModel
     */
    SysUserModel detail(Integer id);

    /**
     * 查询用户列表
     *
     * @param sysUserQuery 查询用户参数
     * @return List<SysUserModel>
     */
    List<SysUserModel> findList(SysUserQuery sysUserQuery);

    /**
     * 查询用户分页
     *
     * @param sysUserQuery 查询用户参数
     * @param pageQuery    查询分页参数
     * @return PageResult<SysUserModel>
     */
    PageResult<SysUserModel> findPage(SysUserQuery sysUserQuery, PageQuery pageQuery);

    /**
     * 获取初始化密码
     *
     * @return String
     */
    String getInitPassword();

    /**
     * 修改个人头像
     *
     * @param multipartFile 修改个人头像参数
     * @return 头像链接
     */
    String editAvatar(MultipartFile multipartFile);

    /**
     * 修改个人信息
     *
     * @param sysUserProfileWrite 修改个人信息参数
     * @return 是否成功
     */
    Boolean editProfile(SysUserProfileWrite sysUserProfileWrite);

    /**
     * 修改个人密码
     *
     * @param sysUserPasswordWrite 修改个人密码参数
     * @return 是否成功
     */
    Boolean editPassword(SysUserPasswordWrite sysUserPasswordWrite);


}
